// All Books
MATCH (b:Book)
WHERE NOT b.views IS NULL
OPTIONAL MATCH (b)--(:Section)--(r:Reader)
OPTIONAL MATCH (a:Author)-[:AUTHOR]->(b)
WITH b, COLLECT(DISTINCT r) AS readers, COLLECT(a) AS authors
RETURN
b.urlLibrivox AS urlLibrivox,
'http://archive.org/details/'+b.idIarchive AS urlIarchive,
b.language AS lang,
date(b.dateUploaded) AS dateUploaded,
authors[0].firstName +' '+authors[0].lastName AS author,
b.title AS title,
b.copyrightYear AS copyrightYear,
b.views AS views,
CASE
WHEN SIZE(readers) = 1 THEN readers[0].name
ELSE SIZE(readers)
END AS readerDisp,
CASE
WHEN SIZE(readers) = 1
THEN 'https://librivox.org/reader/'+readers[0].id
ELSE NULL
END AS readerSingle
ORDER BY b.views DESC;